// HashMap是 Java标准库中的哈希表实现,提供了基于键值对(key-value)的存储,可高效的完成键值对的增删查改操作
import java.util.HashMap;
import java.util.Map;

public class aaa_HashMap{
     public static void main(String[] args) {

          // 初始化哈希表
          HashMap<Integer, String> hashmap = new HashMap<>();
          hashmap.put(1, "one");
          hashmap.put(2, "two");
          hashmap.put(3, "three");
  
          // 检查哈希表是否为空   输出：false
          System.out.println(hashmap.isEmpty());
  
          // 获取哈希表的大小   输出：3
          System.out.println(hashmap.size());
  

          // 查找指定键值是否存在    输出：Key 2 -> two
          if(hashmap.containsKey(2)) {
              System.out.println("Key 2 -> " + hashmap.get(2));
          }else{
              System.out.println("Key 2 not found.");
          }
  

          // 获取指定键对应的值，若不存在会返回 null     输出：null
          System.out.println(hashmap.get(4));
  
          // 获取指定键对应的值，若不存在则返回默认值     输出：defaultVal
          System.out.println(hashmap.getOrDefault(4, "defaultVal"));
  
          // 在最后(第四位，key=4)插入一个新的键值对
          hashmap.put(4, "four");
  
          // 获取新插入的值   输出：four
          System.out.println(hashmap.get(4));
  
          // 删除键值对
          hashmap.remove(3);
  
          // 检查删除后键 3是否存在         输出：Key 3 not found.
          if(hashmap.containsKey(3)) {
              System.out.println("Key 3 -> " + hashmap.get(3));
          } else {
              System.out.println("Key 3 not found.");
          }
  

          // 遍历哈希表
          for(Map.Entry<Integer, String> pair : hashmap.entrySet()) {
              System.out.println(pair.getKey() + " -> " + pair.getValue());
          }
          // 1 -> one
          // 2 -> two
          // 4 -> four
          System.out.println();


          HashMap<String, Integer> map = new HashMap<>();
          map.put("苹果", 10);
          map.put("香蕉", 20);
          map.put("橙子", 30);
//  Java中遍历哈希表有以下几种常见方式：

//1.使用 entrySet()遍历键值对 （最常用、最高效）
          System.out.println("·使用 entrySet() 遍历:");
          for (Map.Entry<String, Integer> entry : map.entrySet()) {
               String key = entry.getKey();
               Integer value = entry.getValue();
               System.out.println(key + " -> " + value);
          }
//2.使用 keySet() 遍历键，再获取值   (最低效，不推荐)
          System.out.println("·使用 keySet() 遍历:");
          for (String key : map.keySet()) {
               Integer value = map.get(key);
               System.out.println(key + " -> " + value);
          }
//3.只遍历值（不需要键 key）
          System.out.println("·只遍历值:");
               for (Integer value : map.values()) {
               System.out.println(value);
          }
//4. 使用 Java 8 的 forEach 和 Lambda 表达式
          System.out.println("·使用 Java 8 forEach:");
          map.forEach((key, value) -> {
               System.out.println(key + " -> " + value);
          });

      }
}
